package top.smallway.lightbandassistant_app.UI;

import static top.smallway.lightbandassistant_app.UI.MainActivity.loginManager;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.core.BasePopupView;

import top.smallway.lightbandassistant_app.R;

/**
 * 创建消息页面
 * 用于用户创建和发布新的消息
 * 包含标题、关键词和内容的输入框，以及发布按钮
 * 
 * 该页面提供了一个简单的消息创建界面，用户可以：
 * 1. 输入消息标题（必填）
 * 2. 输入关键词（可选）
 * 3. 输入消息内容（必填）
 * 4. 点击发布按钮提交消息
 */
public class Create_Message extends AppCompatActivity {
    // 消息标题输入框，用于输入消息的标题（必填）
    private EditText title;
    // 消息关键词输入框，用于输入消息的关键词（可选）
    private EditText key;
    // 消息内容输入框，用于输入消息的详细内容（必填）
    private EditText content;
    // 发布按钮，点击后会验证输入并发布消息
    private Button Posts;
    // 加载对话框，用于显示消息发布过程的加载状态
    private BasePopupView xPopup;
    
    /**
     * 消息处理器
     * 用于处理消息发布后的回调
     * 包括关闭加载对话框和显示发布结果
     * 
     * 处理的消息类型：
     * - case 1: 消息发布完成，显示服务器返回的结果并关闭页面
     */
    private final Handler mHandler = new Handler(Looper.myLooper()) {
        /**
         * 分发消息
         * 重写父类的消息分发方法
         * @param msg 待处理的消息对象
         */
        @Override
        public void dispatchMessage(@NonNull Message msg) {
            super.dispatchMessage(msg);
        }

        /**
         * 处理消息
         * 根据消息类型执行相应的操作
         * @param msg 待处理的消息对象
         */
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 1:
                    // 关闭加载对话框
                    xPopup.smartDismiss();
                    // 显示服务器返回的消息
                    Toast.makeText(getApplicationContext(), msg.obj.toString(), Toast.LENGTH_SHORT).show();
                    // 关闭当前页面
                    finish();
                    break;
            }
        }
    };

    /**
     * Activity创建时的初始化
     * 设置布局、初始化视图组件并配置发布按钮的点击事件
     * @param savedInstanceState 保存的实例状态
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 设置页面布局
        setContentView(R.layout.activity_create_message);
        // 初始化视图组件
        Initiew();
        // 配置发布按钮的点击事件
        Posts.setOnClickListener(v -> {
            // 验证标题和内容是否为空
            if (title.getText().toString().equals("") || content.getText().toString().equals("")) {
                Toast.makeText(this, "标题或内容不能为空", Toast.LENGTH_SHORT).show();
            } else {
                // 初始化Cookie
                Home.posts.InitCookie(loginManager.getCookieJar());
                Message msg = new Message();
                // 显示加载对话框
                xPopup = new XPopup.Builder(this).asLoading("正在加载中").show();
                // 在新线程中发布消息
                new Thread(() -> {
                    // 调用API发布消息
                    String respond = Home.posts.Add_message(title.getText().toString(), content.getText().toString(), key.getText().toString(), loginManager.GetToken());
                    // 设置消息内容和类型
                    msg.obj = respond;
                    msg.what = 1;
                    // 发送消息到Handler处理
                    mHandler.sendMessage(msg);
                }).start();
            }
        });
    }

    /**
     * 初始化视图组件
     * 通过findViewById绑定布局中的UI组件
     */
    private void Initiew() {
        // 绑定标题输入框
        title = findViewById(R.id.title);
        // 绑定关键词输入框
        key = findViewById(R.id.key);
        // 绑定内容输入框
        content = findViewById(R.id.content);
        // 绑定发布按钮
        Posts = findViewById(R.id.Posts);
    }
}